package com.sxj.corejava.code14_Lambda表达式;

/**
 * @author 石小俊
 */
public class Test01_基本用法 {
    public static void main(String[] args) {
        // 匿名内部类用法
        SomeInterface si = new SomeInterface() {
            @Override
            public void doSome() {
                System.out.println("这是匿名内部类的用法");
            }
        };
        si.doSome();
        // Lambda表达式用法
        // SomeInterface si1 = () -> {System.out.println("这是Lambda表达式的用法");};
        // 简化版,当方法体中有且仅有一行代码,此时的大括号可以省略
        SomeInterface si1 = () -> System.out.println("这是Lambda表达式的用法");
        si1.doSome();

        // 匿名内部类用法
        SomeInterface2 si2 = new SomeInterface2() {
            @Override
            public int add(int i, int j) {
                return i + j;
            }
        };
        System.out.println(si2.add(2, 3));
        // Lambda表达式用法
        // SomeInterface2 si21 = (a, b) -> {return a + b;};
        // 简化版,当方法体中有且仅有一行代码,且这一行代码是return语句,则大括号与return关键字都可以省略
        SomeInterface2 si21 = (a, b) -> a + b;
        System.out.println(si21.add(3, 4));

        // 匿名内部类用法
        SomeInterface3 si3 = new SomeInterface3() {
            @Override
            public void doSome(String s) {
                System.out.println(s);
            }
        };
        si3.doSome("Hello World");

        // Lambda表达式用法
        // 如果参数列表有且仅有一个参数,则小括号可以省略
        SomeInterface3 si31 = s -> System.out.println(s);
        si31.doSome("Hello Lambda");
    }

}

interface SomeInterface {
    void doSome();
}

interface SomeInterface2 {
    int add(int i, int j);
}

interface SomeInterface3 {
    void doSome(String s);
}